"""
example08 - 字符串的操作

str（字符串） ---> encode(字符集) ---> bytes（字节串）
bytes（字节串） ---> decode(字符集) ---> str（字符串）

阅读作业：
1.了解什么是“百分号编码”以及它的应用场景。
2.了解什么是“BASE64”编码以及它的应用场景。

编码：把一种字符集转换成另外一种字符集

要点：
1、选择字符集（编码）的时候，最佳的选择（也是默认的）是UTF-8编码。
2、编码和解码的字符集要保持一致，否则就会出现乱码现象。
3、不能用ISO-8859-1编码保存中文，否则会出现编码黑洞，中文变成？。
4、UTF-8是Unicode的一种实现方案，也是一种变长的编码,
   最少1个字节（英文和数字），最多4个字节（Emoji），表示中文用3个字节

Author: Administrator
Date: 2024/1/11
"""

# a = '我爱你中国'
# # GBK <--- GB2312 <--- ASCII;
# # UTF-8编码是Unicode（万国码）的一种实现方案
# b = a.encode('gbk')
# print(type(b))
# print(b, len(b))
# c = b'\xce\xd2\xb0\xae\xc4\xe3\xd6\xd0\xb9\xfa'
# print(c.decode('gbk'))


# a = '我爱你中国亲爱的母亲'
# # GBK <--- GB2312 <--- ASCII;
# # UTF-8编码是Unicode（万国码）的一种实现方案
# b = a.encode('utf-8')
# print(type(b))
# print(b, len(b))
# c = b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xb2\xe7\x88\xb1\xe7\x9a\x84\xe6\xaf\x8d\xe4\xba\xb2'
# # 如果编码和解码的方式不一致，Python中通常会产生UnicodeEncodeError异常
# # 也有可能会出现乱码现象
# print(c.decode('gbk'))
# print(c.decode('utf-8'))


# a = '我爱你中国亲爱的母亲'
# # UnicodeEncodeError:'latin-1' codec can't encode characters in position 0-9
# # latin-1编码不能够用来处理中文字符（因为会产生编码黑洞，中文全部变成？，想解码没有机会）
# b = a.encode('iso-8859-1')
# print(b, len(b))


# UTF-8是一种变长编码
# 表示数字和英文字母的时候，只需要1个字节
# 表示中文的时候，需要3个字节
# 表示Emoji字符的时候，需要4个字节
# 有些字符是占用2个字节
a = '🎀🧨好'
b = a.encode('utf-8')
print(type(b))
print(b, len(b))